package jp.seraph.jsmf.motion;

import org.apache.commons.collections.Predicate;

/**
 * 編集可能なMotionを表すインターフェース
 */
public interface EditableMotion extends Motion {
    /**
     * このMotionにMotionSessionをひとつ追加します
     *
     * @param aSession
     */
    public void addSession(MotionSession aSession);
    
    /**
     * aIndexの位置にMotionSessionを挿入します
     * 
     * @param aIndex
     * @param aSession
     */
    public void insertSession(int aIndex, MotionSession aSession);

    /**
     * Predicate#executeが最初にtrueを返すMotionSessionを削除する
     *
     * @param aCondition
     * @return 削除されたMotionSession 削除されなければnull
     */
    public MotionSession removeSession(Predicate aCondition);
    
    /**
     * aIndexの位置に存在するMotionSessionを削除します。
     * 
     * @param aIndex
     * @return 削除されたMotionSession
     */
    public MotionSession removeSession(int aIndex);
}